{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 构建源信息\n",
    "\n",
    "`tvm/include/tvm/ir/si_builder.h` 定义了名为 `SIBuilder` 的类，用于在重写表达式期间构建源信息。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "该类提供了以下公共成员函数：\n",
    "\n",
    "- `SIBuilder(const Span& span = Span())`：创建空的 `SIBuilder` 对象。\n",
    "- `SIBuilder(const Array<Span>& spans = Array<Span>())`：从一个 `Span` 数组中创建一个 `SIBuilder` 对象。\n",
    "- `SIBuilder(const std::initializer_list<Span>& init)`：从一个 `Span` 初始化器列表中创建一个 `SIBuilder` 对象。\n",
    "- `SIBuilder(const T& entry, const tvm::Array<T>& inputs = {})`：从一个给定的 `entry` 和一个输入 `inputs` 创建一个 `SIBuilder` 对象。\n",
    "- `SIBuilder(const tir::Stmt& entry, const tvm::Array<PrimExpr>& inputs = {})`：从一个给定的 `entry` 和一个输入 `inputs` 创建一个 `SIBuilder` 对象。\n",
    "- `SIBuilder(const tir::Stmt& entry, const tvm::Array<tir::Stmt>& inputs = {})`：从一个给定的 `entry` 和一个输入 `inputs` 创建一个 `SIBuilder` 对象。\n",
    "- `~SIBuilder()`：析构函数。\n",
    "- `SIBuilder(const SIBuilder&) = delete`：禁止拷贝构造。\n",
    "- `SIBuilder& operator=(const SIBuilder&) = delete`：禁止赋值拷贝。\n",
    "- `Span Build() const`：构建一个基于给定的 `Span` 或子图的源信息跨度。\n",
    "- `void RecursivelyFillSpan(const T& entry, const std::unordered_set<T, ObjectPtrHash, ObjectPtrEqual>& inputs) const`：递归地填充从 `entry` 到 `inputs` 的所有 `Expr` 的跨度。\n",
    "- `void RecursivelyFillSpan(const tir::Stmt& entry, const std::unordered_set<PrimExpr, ObjectPtrHash, ObjectPtrEqual>& inputs) const`：递归地填充从 `entry` 到 `inputs` 的所有 `PrimExpr` 的跨度。\n",
    "- `void RecursivelyFillSpan(const tir::Stmt& entry, const std::unordered_set<tir::Stmt, ObjectPtrHash, ObjectPtrEqual>& inputs) const`：递归地填充从 `entry` 到 `inputs` 的所有 `Stmt` 的跨度。\n",
    "\n",
    "私有成员变量包括：\n",
    "\n",
    "- `struct Impl;`：内部实现结构体。\n",
    "- `std::unique_ptr<Impl> impl_`：指向内部实现结构体的指针。\n",
    "- `std::unique_ptr<Impl> CreateImpl(const Span& span)`：根据给定的 `span` 创建内部实现结构体。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
